package org.swim.remote.entities;

import java.util.Date;
import java.util.Set;

public interface IUser extends IEntity{

	public static enum Status {
		REGISTERED, UNREGISTERED
	}
	
	public enum Attribute{
		NAME("name"),
		SURNAME("surname"),
		EMAIL("email"),
		PASSWORD("password"),
		STATUS("status");
		
		private final String attributeName;
		
		Attribute(String attributeName){
			this.attributeName = attributeName;
		}
		
		public String toString(){
			return attributeName;
		}
	}
	
	public enum Default{
		NAME("noname"),
		SURNAME("nosurname"),
		PASSWORD("nopassword"),
		STATUS(Status.UNREGISTERED);
		
		private final String defaultName;
		private final Status defaultStatus;
		
		Default(String defaultName){
			this.defaultName = defaultName;
			this.defaultStatus = Status.UNREGISTERED;
		}
		
		Default(Status defaultStatus){
			this.defaultStatus = defaultStatus;
			this.defaultName = "noname";
		}
		
		public String toString(){
			return defaultName;
		}
		
		public Status toStatus(){
			return defaultStatus;
		}
	}
	
	public abstract String getName();

	public abstract String getSurname();
	
	public abstract String getFullName();

	public abstract String getEmail();

	public abstract String getPassword();

	public abstract Status getStatus();

	public abstract Date getBirth();

	public abstract byte[] getPhoto();

	public abstract String getPermissions();

	public abstract Set<IFeedback> getFeedbacksForReceiverIdSet();

	public abstract Set<ICollaboration> getCollaborationsForReceiverIdSet();

	public abstract Set<ICollaboration> getCollaborationsForSenderIdSet();

	public abstract Set<IFriendship> getFriendshipsForReceiverIdSet();

	public abstract Set<IMessage> getMessagesForSenderIdSet();

	public abstract Set<IAbility> getAbilitiesSet();

	public abstract Set<IMessage> getMessagesForReceiverIdSet();

	public abstract Set<IFeedback> getFeedbacksForSenderIdSet();

	public abstract Set<IFriendship> getFriendshipsForSenderIdSet();

	public abstract Double getFeedbackAvgVal();

}